<?php 
	class AtividadePergunta{
		//declaracao de variaveis de instância
		public $idPergunta;
		public $identificador;
		public $idAtividade;
		public $texto;
		public $tipo; //multiplaEscolha ou dissertativa
		public $valor;
		public $ordem; // order by ordem - vai ser o indice da vizualizaçao das perguntas
		public $tamanho;
		public $gabarito;
		
		public $alternativas = array(); // alternativas de cada pergunta
		
		public $comentario; //TODO buscar e adicionar isso no banco!! (acho que tem que ter para todos, logo, mudar o banco.)
		
		//fim da declaracao de variáveis
		
		//Construtor da classe, se for passado um id, ela seta os atributos da pergunta, senão, não faz nada?
		public function AtividadePergunta($idPergunta = NULL){
			if(is_numeric($idPergunta)){
				$strQuery = "SELECT * FROM atividadePerguntas WHERE idPergunta = $idPergunta";
				if($resultado = BancoDados::query($strQuery)){
					$this->idPergunta	 = $idPergunta;
					$this->idAtividade	 = $resultado[0]["idAtividade"];
					$this->texto		 = $resultado[0]["texto"];
					$this->tipo			 = $resultado[0]["tipo"];
					$this->valor 		 = $resultado[0]["valor"];
					$this->ordem 		 = $resultado[0]["ordem"];
					$this->tamanho		 = $resultado[0]["tamanho"];
					$this->identificador = $resultado[0]["identificadorPergunta"];
					$this->gabarito		 = $resultado[0]["gabarito"];
				}
				$strQuery1 = "SELECT * FROM atividadePerguntaAlternativas WHERE idPergunta = $idPergunta";
				if($resultado1 = BancoDados::query($strQuery1)){
					$this->alternativas = array();
					foreach($resultado1 as $indice => $conteudo){
						$alt["idAlternativa"] = $conteudo["idAlternativa"];
						$alt["correta"] = $conteudo["correta"];
						$alt["alternativa"] = $conteudo["alterativa"];					
						array_push($this->alternativas, $alt);
					}
				}
			}else{

			}
		}
		
		//Metodo para pegar as perguntas de uma determinada atividade, retornado um array de objetos AtividadePergunta
		public static function getTodasPerguntasAtividade($idAtividade,$tipoPadrao = 'array'){
			$strQuery = "SELECT * FROM atividadePerguntas WHERE idAtividade = $idAtividade";
			$arrayPerguntas = array();
			if($resultado = BancoDados::query($strQuery)){
				foreach($resultado as $indice => $conteudo){
					if($tipoPadrao === 'array'){
						array_push($arrayPerguntas, obj2arr(new AtividadePergunta($conteudo["idPergunta"])));
					}else{
						array_push($arrayPerguntas, (new AtividadePergunta($conteudo["idPergunta"])));
					}
				}
			}
			
			if(count($arrayPerguntas) != 0){
				return $arrayPerguntas;	
			}else{
				return null;
			}
			
		}
		
		//inserir uma pergunta nova.
		public function inserir(){
			if($this->validar()){
				$inseriuAlternativa = true;
				$strQuery = "INSERT INTO atividadePerguntas VALUES(DEFAULT, $this->idAtividade, '$this->texto', '$this->tipo', $this->valor,0,0,'$this->identificador', '$this->gabarito')";
				if(BancoDados::query($strQuery)){
					$strQuery1 = "SELECT idPergunta FROM atividadePerguntas WHERE idAtividade = $this->idAtividade AND texto = '$this->texto' AND tipo = '$this->tipo' AND valor = $this->valor AND ordem = 0 AND tamanho = 0 ORDER BY idPergunta DESC LIMIT 1";
					if($resut = BancoDados::query($strQuery1)){
						$this->idPergunta = $resut[0][0];
					}
					if($this->alternativas != null){
						foreach($this->alternativas as $alternativa){
							if(!($this->inserirAlternativaPergunta($alternativa['alternativa'],$alternativa['correta']))){
								$inseriuAlternativa = false;
							}
						}
					}
					return $inseriuAlternativa;
				}else{
					return false;
				}
			}
		}
		
		/**
		 * Atualiza apagando a entrada no banco
		 */
		public function atualizar(){
			if($this->validar())
				if($this->apagar())
					if($this->inserir()) $atualizou = true;
			
			if($atualizou){
				atualizaCurso();
				return true;
			}
			else return false;
		}
		
		public function editar(){
			if($this->validar()){
				$editou = true;
				$strQuery = "UPDATE atividadePerguntas SET texto = '$this->texto', valor = $this->valor, gabarito = '$this->gabarito' WHERE idPergunta = $this->idPergunta";
				if(BancoDados::query($strQuery)){
					$strQuery1 = "DELETE FROM atividadePerguntaAlternativas WHERE idPergunta = $this->idPergunta";
					if(BancoDados::query($strQuery1)){
						if($this->alternativas != null){
							foreach($this->alternativas as $alternativa){
								if(!($this->inserirAlternativaPergunta($alternativa['alternativa'],$alternativa['correta']))){
									$editou = false;
								}
							}
						}
						atualizaCurso();
						return $editou;
					}
				}else{
					return false;
				}
			}else{
				return false;
			}
		}
		
		public function inserirAlternativaPergunta($strAlternativa,$strCorreta = false){
			$strQuery = "INSERT INTO atividadePerguntaAlternativas VALUES(DEFAULT, $this->idPergunta, '$strAlternativa','$strCorreta')";
				if(BancoDados::query($strQuery)){
					atualizaCurso();
					return true;
				}else{
					return false;
				}
		}
		
		public function apagar(){
			$apagou = true;
			$strQuery = "DELETE FROM atividadePerguntas WHERE idPergunta = $this->idPergunta";
			if(BancoDados::query($strQuery)){
				if(count($this->alternativas) != 0){
					$strQuery1 = "DELETE FROM atividadePerguntaAlternativas WHERE idPergunta = $this->idPergunta";
					if(!BancoDados::query($strQuery1)){
						$apagou = false;
					}
				}
				atualizaCurso();
				return $apagou;
			}
		}
		
		public function validar(){
			$validou	=	true;
			if ($this->texto == "" || $this->texto == null){
				$validou	=	false;			
			}
			if($this->tipo == 'orientacao' || $this->tipo == 'wiki'){
				if(!$validou){
					adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_DESCRICAO_ATIVIDADE'))), 'erro');	
				}
				return $validou;
			}elseif(!$validou){
				adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_TEXTO'))), 'erro');
			}
			if(count($this->alternativas) == 0 && !($this->tipo == "dissertativa" || $this->tipo == "envio")){
				$validou	=	false;
				adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_INSERIR_ALTERNATIVA'), 'erro');
			}
			
			return $validou;
		}
	}
?>